package com.continautos.common.web;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.Serializable;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.continautos.common.enums.EEstadoCola;
import com.continautos.common.enums.ETipoUsuario;
import com.continautos.common.persistence.DAOFactory;
import com.continautos.common.persistence.dto.CtaTbAtencion;
import com.continautos.common.persistence.dto.CtaTbColaCliente;
import com.continautos.common.persistence.dto.CtaTbColaClientePk;
import com.continautos.common.persistence.exceptions.CtaTbAtencionDaoException;
import com.continautos.common.persistence.exceptions.CtaTbColaClienteDaoException;

@ManagedBean(name = "solicitarClienteBean")
@SessionScoped
public class SolicitarClienteBean implements Serializable {

	private static final long serialVersionUID = 1L;

	@ManagedProperty(value = "#{userSessionBean}")
	private UserSessionBean userSessionBean;

	private int filaSelected;

	private List<Map<String, String>> listadoClientesCola = new ArrayList<Map<String, String>>();

	private int codigoClienteAnterior;

	private int idIngreso;

	public SolicitarClienteBean() {

		codigoClienteAnterior = 0;

		listadoClientesCola = new ArrayList<Map<String, String>>();
		FacesContext facesContext = FacesContext.getCurrentInstance();
		HttpSession session = (HttpSession) facesContext.getExternalContext()
				.getSession(false);
		userSessionBean = (UserSessionBean) session
				.getAttribute("userSessionBean");

		// DUMMY
		/*
		 * Map<String, String> columnas = new HashMap<String, String>();
		 * 
		 * columnas.put("1", "columna 1"); columnas.put("2", "columna 2");
		 * columnas.put("3", "columna 3"); columnas.put("4", "columna 4");
		 * columnas.put("5", "columna 5"); columnas.put("6", "columna 6");
		 * 
		 * listaPedidos.add(columnas); listaPedidos.add(columnas);
		 * listaPedidos.add(columnas); listaPedidos.add(columnas);
		 * listaPedidos.add(columnas); listaPedidos.add(columnas);
		 * listaPedidos.add(columnas); listaPedidos.add(columnas);
		 */
	}

	public void cargarDatos() {

		HttpServletRequest req = (HttpServletRequest) FacesContext
				.getCurrentInstance().getExternalContext().getRequest();
		
		HttpServletResponse res = (HttpServletResponse) FacesContext
				.getCurrentInstance().getExternalContext().getResponse();
		
		try {
			
			//res.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
			//res.setHeader("Location", "/CONTINAUTOS/InvocarAppServlet?datalink="+idIngreso);
			//res.setHeader("Content-type", "application/x-www-form-urlencoded");
			
			//res.sendRedirect("/CONTINAUTOS/InvocarAppServlet?datalink="+idIngreso);
			//res.sendRedirect("/CONTINAUTOS/resp.html");
			res.setContentType("text/html");
			
			//res.encodeRedirectURL("/CONTINAUTOS/InvocarAppServlet?datalink="+idIngreso);
			
			PrintWriter pr = res.getWriter();
			
			String strUrl = "http://" + req.getServerName() + ":"
					+ req.getServerPort() + req.getContextPath()
					+ "/portalWeb/paginaSolicitarCliente.xhtml";
			
			pr.print("<form id='formDataLink' action='ecosistec.com://ecosistec'> <input type='hidden' id='defaultconfig' name='defaultconfig' value='false' x-webkit-speech=''> <table> <tbody><tr> <td></td> <td><input type='hidden' id='datalink' name='datalink' value='"+ idIngreso +"' x-webkit-speech=''></td></tr></tbody></table> </form>" +
					"<script type='text/javascript'> " +
					" document.getElementById('formDataLink').submit(); " +
					" setTimeout(function(){window.location.href='"+strUrl+"'; },3000) " +
					"</script>");
			
			/*
			pr.print("<script type='text/javascript'> " +
					"  alert('entro yupi');" +
					"</script>");
			
			pr.flush();
			*/
			
			pr.flush();
			res.flushBuffer();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		/*
		String strUrl = "http://" + req.getServerName() + ":"
				+ req.getServerPort() + req.getContextPath()
				+ "/InvocarAppServlet?datalink=" + idIngreso;

		try {
			URL url = new URL(strUrl);
			URLConnection yc = url.openConnection();

			BufferedReader in = new BufferedReader(new InputStreamReader(
					yc.getInputStream()));
			String inputLine;
			while ((inputLine = in.readLine()) != null)
				System.out.println(inputLine);
			in.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		*/
		
		

		/*
		 * try { FacesContext.getCurrentInstance().getExternalContext()
		 * .redirect("/CONTINAUTOS/InvocarAppServlet?datalink="+idIngreso); }
		 * catch (IOException e) { e.printStackTrace(); }
		 */
	}

	public void consultarProximoEnLista() {

		listadoClientesCola = DAOFactory.getConsultasDao()
				.listadoProximoCliente(userSessionBean.getUsuario().getId());

		if (!listadoClientesCola.isEmpty()) {

			String codigoCola = listadoClientesCola.get(0).get("ID");

			if (codigoCola != null) {
				int cod = Integer.parseInt(codigoCola);
				CtaTbAtencion atencion = new CtaTbAtencion();
				CtaTbColaCliente cola;

				try {
					cola = DAOFactory.getCtaTbColaClienteDao()
							.findByPrimaryKey(cod);
					cola.setEstado(EEstadoCola.ATENCION.getValue());
					cola.setFechaAtencion(new Date());

					DAOFactory.getCtaTbColaClienteDao().update(
							new CtaTbColaClientePk(cod), cola);

					codigoClienteAnterior = cod;

					// INsertar el asesor
					if (userSessionBean.getTipoUsuario().equals(
							ETipoUsuario.ASESOR)) {

						atencion.setFecha(new Date());
						atencion.setIdAsesor(userSessionBean.getUsuario()
								.getId());

						atencion.setIdCliente(cola.getIdCliente());
						atencion.setIdIngreso(cola.getIdIngreso());

						DAOFactory.getCtaTbAtencionDao().insert(atencion);
					}
					idIngreso = cola.getIdIngreso();
				} catch (CtaTbColaClienteDaoException e) {
					e.printStackTrace();
				} catch (CtaTbAtencionDaoException e) {
					e.printStackTrace();
				}
			}
		}
	}

	public void terminanAtencion() {

		if (codigoClienteAnterior != 0) {

			try {
				CtaTbColaCliente cola = DAOFactory.getCtaTbColaClienteDao()
						.findByPrimaryKey(codigoClienteAnterior);
				cola.setEstado(EEstadoCola.TERMINADO.getValue());
				cola.setFechaTerminado(new Date());

				DAOFactory.getCtaTbColaClienteDao().update(
						new CtaTbColaClientePk(codigoClienteAnterior), cola);

				codigoClienteAnterior = 0;

				listadoClientesCola = new ArrayList<Map<String, String>>();

			} catch (CtaTbColaClienteDaoException e) {
				e.printStackTrace();
			}

		}

	}

	public UserSessionBean getUserSessionBean() {
		return userSessionBean;
	}

	public void setUserSessionBean(UserSessionBean userSessionBean) {
		this.userSessionBean = userSessionBean;
	}

	public int getFilaSelected() {
		return filaSelected;
	}

	public void setFilaSelected(int filaSelected) {
		this.filaSelected = filaSelected;
	}

	public List<Map<String, String>> getListadoClientesCola() {
		return listadoClientesCola;
	}

	public void setListadoClientesCola(
			List<Map<String, String>> listadoClientesCola) {
		this.listadoClientesCola = listadoClientesCola;
	}

	public int getIdIngreso() {
		return idIngreso;
	}

	public void setIdIngreso(int idIngreso) {
		this.idIngreso = idIngreso;
	}

}
